#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QString>
#include <QLineEdit>
#include <QPixmap>
#include <QPainter>
#include <QPainterPath>
#include "messageshowarea.h"
#include "sessionfriendarea.h"
#include "setwidget.h"
#include "selfinfowidget.h"
#include "addoperationwidget.h"
#include "messageeditarea.h"

class MainWidget : public QWidget
{
    Q_OBJECT
private:
    static MainWidget* instance;
    // 对于单例而言, 最关键的是 限制别人创建实例, 而不是创建实例
    MainWidget(QWidget *parent = nullptr); // 私有构造函数

public:
    static MainWidget* getInstance();
    ~MainWidget();

    MessageShowArea* getMessageShowArea(){
        return messageShowArea;
    }

    // 数据处理
    void loadSessionList();
    void updateChatSessionList();

    void loadFriendList();
    void updateFriendList();
    void loadApplyList();
    void updateApplyList();

    void loadRecentMessage(const QString& chatSessionId);
    void updateRecentMessage(const QString& chatSessionId);

    void switchSession(const QString& userId);

private:
    QWidget* windowLeft;    // 窗口最左侧部分
    QWidget* windowMid;     // 窗口中间部分
    QWidget* windowRight;   // 窗口最右侧部分

    QPushButton* userAvatar;    // 用户头像
    QPushButton* sessionTabBtn; // 会话标签页按钮
    QPushButton* friendTabBtn;  // 好友标签页按钮
    QPushButton* applyTabBtn;   // 好友申请页按钮
    QPushButton* moreSetBtn; // 更多设置页按钮

    void initMainWindow();   // 初始化主窗口样式布局
    void initLeftWindow();   // 初始化左侧窗口样式布局
    void initMidWindow();    // 初始化中间窗口样式布局
    void initRightWindow();  // 初始化右侧窗口样式布局

    void initSignalSlot();      // 初始化信号槽
    // 描述当前激活的标签页
    enum ActiveTab{
        SESSION_LIST,
        FRIEND_LIST,
        APPLY_LIST
    };
    ActiveTab activeTab = SESSION_LIST;
    ActiveTab getActiveTab();

    void switchTabToSession();
    void switchTabToFriend();
    void switchTabToApply();


    SetWidget* setWidget = nullptr; // 懒加载，只创建一次
    void onMoreSetBtnClicked();

    // 会话标签页元素
    QLineEdit* searchEdit;
    QPushButton* addOperationBtn;              // 快捷操作
    SessionFriendArea* sessionFriendArea;
    void OnOperationBtnClicked();

    // 聊天标签元素
    QLabel* sessionTitleLabel;              // 会话标题
    QPushButton* extraBtn;                  // 会话详情
    MessageShowArea* messageShowArea;       // 消息展示区
    MessageEditArea* messageEditArea;       // 消息编辑区
};


#endif // MAINWIDGET_H
















